/**
 * App端权限使用示例
 * 
 * 展示如何使用新的身份权限检查方法：
 * - isOwnerUser: 检查是否为业主用户
 * - isPropertyCompanyUser: 检查是否为物业公司用户  
 * - isSuperAdmin: 检查是否为超级管理员
 * - isNormalUser: 检查是否为普通用户
 * 
 * @author Wu.Liang
 * @date 2025-01-30
 */
import { PermissionUtils } from './permission'

/**
 * 页面权限检查示例
 */
export class PagePermissionExample {
  
  /**
   * 检查是否可以访问业主功能页面
   */
  static canAccessOwnerPage() {
    const context = { module: 'owner', action: 'page_access' }
    
    // 业主用户、物业公司用户、超级管理员都可以访问业主功能
    return PermissionUtils.isOwnerUser(context) || 
           PermissionUtils.isPropertyCompanyUser(context) || 
           PermissionUtils.isSuperAdmin(context)
  }
  
  /**
   * 检查是否可以访问物业功能页面
   */
  static canAccessPropertyPage() {
    const context = { module: 'property', action: 'page_access' }
    
    // 只有物业公司用户和超级管理员可以访问物业功能
    return PermissionUtils.isPropertyCompanyUser(context) || 
           PermissionUtils.isSuperAdmin(context)
  }
  
  /**
   * 检查是否可以访问普通用户功能页面
   */
  static canAccessNormalUserPage() {
    const context = { module: 'normal_user', action: 'page_access' }
    
    // 所有用户都可以访问普通用户功能
    return true
  }
  
  /**
   * 检查是否可以访问管理员功能页面
   */
  static canAccessAdminPage() {
    const context = { module: 'admin', action: 'page_access' }
    
    // 只有超级管理员可以访问管理员功能
    return PermissionUtils.isSuperAdmin(context)
  }
}

/**
 * 功能权限检查示例
 */
export class FunctionPermissionExample {
  
  /**
   * 检查是否可以查看物业费信息
   */
  static canViewPropertyFee() {
    const context = { module: 'property_fee', action: 'view' }
    
    // 业主用户只能查看自己的物业费
    if (PermissionUtils.isOwnerUser(context)) {
      return true
    }
    
    // 物业公司用户可以查看所有物业费
    if (PermissionUtils.isPropertyCompanyUser(context)) {
      return true
    }
    
    // 超级管理员可以查看所有物业费
    if (PermissionUtils.isSuperAdmin(context)) {
      return true
    }
    
    return false
  }
  
  /**
   * 检查是否可以编辑物业费信息
   */
  static canEditPropertyFee() {
    const context = { module: 'property_fee', action: 'edit' }
    
    // 只有物业公司用户和超级管理员可以编辑物业费
    return PermissionUtils.isPropertyCompanyUser(context) || 
           PermissionUtils.isSuperAdmin(context)
  }
  
  /**
   * 检查是否可以查看业主信息
   */
  static canViewOwnerInfo() {
    const context = { module: 'owner_info', action: 'view' }
    
    // 业主用户只能查看自己的信息
    if (PermissionUtils.isOwnerUser(context)) {
      return true
    }
    
    // 物业公司用户可以查看所有业主信息
    if (PermissionUtils.isPropertyCompanyUser(context)) {
      return true
    }
    
    // 超级管理员可以查看所有业主信息
    if (PermissionUtils.isSuperAdmin(context)) {
      return true
    }
    
    return false
  }
  
  /**
   * 检查是否可以编辑业主信息
   */
  static canEditOwnerInfo() {
    const context = { module: 'owner_info', action: 'edit' }
    
    // 业主用户可以编辑自己的信息
    if (PermissionUtils.isOwnerUser(context)) {
      return true
    }
    
    // 物业公司用户可以编辑业主信息
    if (PermissionUtils.isPropertyCompanyUser(context)) {
      return true
    }
    
    // 超级管理员可以编辑业主信息
    if (PermissionUtils.isSuperAdmin(context)) {
      return true
    }
    
    return false
  }
  
  /**
   * 检查是否可以查看系统设置
   */
  static canViewSystemSettings() {
    const context = { module: 'system_settings', action: 'view' }
    
    // 只有超级管理员可以查看系统设置
    return PermissionUtils.isSuperAdmin(context)
  }
  
  /**
   * 检查是否可以编辑系统设置
   */
  static canEditSystemSettings() {
    const context = { module: 'system_settings', action: 'edit' }
    
    // 只有超级管理员可以编辑系统设置
    return PermissionUtils.isSuperAdmin(context)
  }
}

/**
 * 数据权限检查示例
 */
export class DataPermissionExample {
  
  /**
   * 检查是否可以查看指定房户的数据
   */
  static canViewHouseholdData(householdId) {
    const context = { module: 'household_data', action: 'view', data: { householdId } }
    
    // 超级管理员可以查看所有数据
    if (PermissionUtils.isSuperAdmin(context)) {
      return true
    }
    
    // 物业公司用户可以查看所有数据
    if (PermissionUtils.isPropertyCompanyUser(context)) {
      return true
    }
    
    // 业主用户只能查看自己的房户数据
    if (PermissionUtils.isOwnerUser(context)) {
      // 这里需要检查房户ID是否属于当前用户
      // 实际实现中需要调用API或从缓存中获取用户的房户列表
      return this.isUserHousehold(householdId)
    }
    
    return false
  }
  
  /**
   * 检查是否可以编辑指定房户的数据
   */
  static canEditHouseholdData(householdId) {
    const context = { module: 'household_data', action: 'edit', data: { householdId } }
    
    // 超级管理员可以编辑所有数据
    if (PermissionUtils.isSuperAdmin(context)) {
      return true
    }
    
    // 物业公司用户可以编辑所有数据
    if (PermissionUtils.isPropertyCompanyUser(context)) {
      return true
    }
    
    // 业主用户只能编辑自己的房户数据
    if (PermissionUtils.isOwnerUser(context)) {
      return this.isUserHousehold(householdId)
    }
    
    return false
  }
  
  /**
   * 检查指定房户是否属于当前用户
   * 实际实现中需要调用API或从缓存中获取用户的房户列表
   */
  static isUserHousehold(householdId) {
    // 这里应该从用户信息中获取用户的房户列表
    // 暂时返回false，实际实现中需要完善
    console.log('检查房户权限，房户ID:', householdId)
    return false
  }
}

/**
 * 页面使用示例
 */
export class PageUsageExample {
  
  /**
   * 在页面onLoad中检查权限
   */
  static onPageLoad() {
    // 检查页面访问权限
    if (!PagePermissionExample.canAccessOwnerPage()) {
      uni.showToast({
        title: '您没有权限访问此页面',
        icon: 'none'
      })
      
      // 跳转到首页或登录页
      setTimeout(() => {
        uni.switchTab({
          url: '/pages/index/index'
        })
      }, 1500)
      
      return false
    }
    
    return true
  }
  
  /**
   * 在按钮点击时检查权限
   */
  static onButtonClick(action) {
    let hasPermission = false
    
    switch (action) {
      case 'view_property_fee':
        hasPermission = FunctionPermissionExample.canViewPropertyFee()
        break
      case 'edit_property_fee':
        hasPermission = FunctionPermissionExample.canEditPropertyFee()
        break
      case 'view_owner_info':
        hasPermission = FunctionPermissionExample.canViewOwnerInfo()
        break
      case 'edit_owner_info':
        hasPermission = FunctionPermissionExample.canEditOwnerInfo()
        break
      case 'view_system_settings':
        hasPermission = FunctionPermissionExample.canViewSystemSettings()
        break
      case 'edit_system_settings':
        hasPermission = FunctionPermissionExample.canEditSystemSettings()
        break
      default:
        hasPermission = false
    }
    
    if (!hasPermission) {
      uni.showToast({
        title: '您没有权限执行此操作',
        icon: 'none'
      })
      return false
    }
    
    return true
  }
  
  /**
   * 在数据加载时检查权限
   */
  static onDataLoad(householdId) {
    if (!DataPermissionExample.canViewHouseholdData(householdId)) {
      uni.showToast({
        title: '您没有权限查看此数据',
        icon: 'none'
      })
      return false
    }
    
    return true
  }
}

/**
 * 获取用户身份信息示例
 */
export class UserIdentityExample {
  
  /**
   * 获取用户完整身份信息
   */
  static getUserIdentityInfo() {
    return PermissionUtils.getUserIdentityInfo()
  }
  
  /**
   * 获取用户身份描述
   */
  static getUserIdentityDescription() {
    const identityInfo = this.getUserIdentityInfo()
    
    if (identityInfo.isSuperAdmin) {
      return '超级管理员'
    } else if (identityInfo.isPropertyCompanyUser) {
      return '物业公司用户'
    } else if (identityInfo.isOwnerUser) {
      return '业主用户'
    } else if (identityInfo.isNormalUser) {
      return '普通用户'
    } else {
      return '未知用户'
    }
  }
  
  /**
   * 检查用户是否有物业公司关联
   */
  static async hasPropertyCompany() {
    return await PermissionUtils.hasPropertyCompany()
  }
  
  /**
   * 获取用户权限信息
   */
  static getUserPermissionInfo() {
    return PermissionUtils.getUserPermissionInfo()
  }
}
